B i to¡n c¡i tói

Một phần của tài liệu Phương pháp quy hoạch động giải một số bài toán tối ưu (Trang 39 - 46)

2 MËT SÈ B€I TON QUY HO„CH ËNG

2.3B i to¡n c¡i tói

B i to¡n: Mët cûa h ng b¡n ç trang sùc câ n mân h ng (n ≤ 100), mân h ng thù i câ trång l÷ñng l  W[i] ≤ 100 v  trà gi¡ V[i] ≤ 100

(sè nguy¶n). Mët t¶n trëm mang theo mët chi¸c tói câ thº üng ÷ñc tèi a trång l÷ñng M ( M ≤ 100). Häi t¶n trëm â s³ l§y nhúng mân h ng n o º ÷ñc têng gi¡ trà lîn nh§t. Bi¸t r¬ng méi mân ch¿ ÷ñc chån ho°c khæng chån.

Input: file v«n b£n BIGBAG.INP

. Dáng 1: Chùa hai sè n, M c¡ch nhau ½t nh§t mët d§u c¡ch.

. n dáng ti¸p theo, dáng thù i chùa hai sè nguy¶n d÷ìng W[i], V[i] c¡ch nhau ½t nh§t mët d§u c¡ch.

Output: file v«n b£n BIGBAG.OUT

. Dáng 1 : Ghi gi¡ trà lîn nh§t t¶n trëm câ thº l§y.

. Dáng 2 : Ghi ch¿ sè nhúng bà l§y.

H¼nh 2.8:

C¡ch gi£i: N¸u gåi F[i, j] l  gi¡ trà lîn nh§t câ thº câ b¬ng c¡ch chån trong c¡c gâi 1,2, . . . , i vîi giîi h¤n trång l÷ñng j. Th¼ gi¡ trà lîn nh§t khi ÷ñc chån trong sè n gâi vîi giîi h¤n trång l÷ñng M ch½nh l 

F[n, M]. V½ dö F[4,10] = 8, ngh¾a l  trong tr÷íng hñp tèi ÷u têng gi¡ trà cõa c¡c mân h ng ÷ñc chån l  8, khi câ 4 mân ¦u ti¶n ÷ñc chån (tø mân 1 ¸n mân 4) v  khèi l÷ñng tèi a cõa tói l  10.

Cæng thùc truy hçi t½nh F[i, j]: Vîi giîi h¤n trång l÷ñng j, vi»c chån tèi ÷u trong sè c¡c gâi 1,2, . . . , i−1, i º câ gi¡ trà lîn nh§t s³ câ hai kh£ n«ng:

∗ N¸u khæng chån gâi thù i th¼ F[i, j] l  gi¡ trà lîn nh§t câ thº b¬ng c¡ch chån trong sè c¡c gâi 1,2, . . . , i−1 vîi giîi h¤n trång l÷ñng l  j. Tùc l 

F[i, j] = F[i−1, j]

∗ N¸u câ chån gâi thù i (t§t nhi¶n ch¿ x²t tîi tr÷íng hñp n y khi m  W[i] ≤ j) th¼ F[i, j] b¬ng gi¡ trà gâi thù i l  V[i] cëng vîi gi¡ trà lîn nh§t câ thº câ ÷ñc b¬ng c¡ch chån trong sè c¡c gâi

1,2, . . . , i−1 vîi giîi h¤n trång l÷ñng j −W[i]. Tùc l  v· m°t gi¡ trà thu ÷ñc:

F[i, j] = V[i] +F[i−1, j−W[i]] V¼ theo c¡ch x¥y düng F[i, j] l  gi¡ trà lîn nh§t câ thº, n¶n F[i, j] s³ l  max trong 2 gi¡ trà thu ÷ñc ð tr¶n.

Cì sð quy ho¤ch ëng: D¹ th§y F[0, j] = 0, gi¡ trà lîn nh§t câ thº b¬ng c¡ch chån trong sè 0 gâi.

T½nh b£ng ph÷ìng ¡n: B£ng ph÷ìng ¡n F gçm n+ 1 dáng, M + 1

cët, tr÷îc ti¶n ÷ñc i·n cì sð quy ho¤ch ëng: Dáng 0 gçm to n sè 0. Sû döng cæng thùc truy hçi, dòng dáng 0 t½nh dáng 1, dòng dáng 1 t½nh dáng 2, v.v. . . ¸n khi t½nh h¸t dáng n.

Truy v¸t: T½nh xong b£ng ph÷ìng ¡n th¼ ta quan t¥m ¸n F[n, M]

â ch½nh l  gi¡ trà lîn nh§t thu ÷ñc khi chån trong c£ n gâi vîi giîi h¤n trång l÷ñng M. N¸u F[n, M] = F[n−1, M] th¼ tùc l  khæng chån gâi thù n, ta truy ti¸p F[n−1, M]. Cán n¸u F[n, M] 6= F[n−1, M]

th¼ ta thæng b¡o r¬ng ph²p chån tèi ÷u câ chån gâi thù n v  truy ti¸p

F[n−1, M −W[n]]. Cù ti¸p töc cho tîi khi truy l¶n tîi h ng 0 cõa b£ng ph÷ìng ¡n.

H¼nh 2.9:

program Lucky_Bag;

const

InputFile = 'BIGBAG.INP';

OutputFile = 'BIGBAG.OUT'; max = 100; var

W, V: Array[1..max] of Integer; F: array[0..max, 0..max] of Integer; n, M: Integer; procedure Enter; var i: Integer; fi: Text; begin Assign(fi, InputFile); Reset(fi); ReadLn(fi, n, M);

for i := 1 to n do ReadLn(fi, W[i], V[i]); Close(fi); (adsbygoogle = window.adsbygoogle || []).push({});

end;

procedure Optimize; var

i, j: Integer; begin FillChar(F[0], SizeOf(F[0]), 0); for i := 1 to n do for j := 0 to M do begin F[i, j] := F[i - 1, j];

if (j >= W[i]) and (F[i, j] < F[i - 1, j - W[i]] + V[i]) then F[i, j] := F[i - 1, j - W[i]] + V[i];

end; end; procedure Trace; var fo: Text; begin

Assign(fo, OutputFile); Rewrite(fo); WriteLn(fo, F[n, M]); while n <> 0 do begin if F[n, M] <> F[n - 1, M] then begin Write(fo, n, ' '); M := M - W[n]; end; Dec(n); end; Close(fo); end; begin

Enter; Optimize; Trace; end.

K˜T LUŠN

Khâa luªn t¼m hiºu v· ph÷ìng ph¡p quy ho¤ch ëng v  sû döng º gi£i b i to¡n tèi ÷u. K¸t qu£ ch½nh ¤t ÷ñc Khâa luªn l :

1. Tr¼nh b y c¡c ki¸n thùc cì b£n v· » quy (cæng thùc truy hçi, c i °t » quy, mët sè b i to¡n mang b£n ch§t » quy), b i to¡n tèi ÷u v  ph÷ìng ph¡p quy ho¤ch ëng.

2. Tr¼nh b y v· gi£i mët sè b i to¡n sû döng ph÷ìng ph¡p quy ho¤ch ëng cì b£n: D¢y con ìn i»u t«ng d i nh§t, B i to¡n c¡i tói, Bi¸n êi x¥u.

V¼ thíi gian câ h¤n n¶n trong Khâa luªn khæng tr¡nh khäi sai sât. Em r§t mong nhªn sü âng gâp, þ ki¸n cõa c¡c th¦y cæ gi¡o v  c¡c b¤n º khâa luªn ÷ñc ho n thi»n.

[1] Hç S¾  m(Chõ bi¶n, 2000), Mët sè ph÷ìng ph¡p gi£i b i to¡n trong tin håc, NXB Giaâ döc.

[2] L¶ Minh Ho ng (2014), Gi£i thuªt v  lªp tr¼nh, Book online [3] Nguy¹n Quþ Khang, Ki·u V«n H÷ng (2002), B i tªp Pascal (tªp

2), NXB ¤i håc Quèc gia H  Nëi.

[4] Robert Sedgewick (2004), C©m nang thuªt to¡n (tªp 1), NXB Khoa håc Kÿ thuªt

[5] Nguy¹n ùc Ngh¾a, Nguy¹n Tæ Th nh(2006), To¡n ríi r¤c, NXB NXB ¤i håc Quèc gia H  Nëi.

Một phần của tài liệu Phương pháp quy hoạch động giải một số bài toán tối ưu (Trang 39 - 46)